// 表单字段基础配置接口
export interface FieldSchema {
  // 字段类型
  type: string
  // 字段标识
  field: string
  // 显示标签
  label: string
  // 占位符
  placeholder?: string
  // 是否必填
  required?: boolean
  // 校验规则
  rules?: any[]
  // 是否禁用
  disabled?: boolean
  // 是否只读
  readonly?: boolean
  // 默认值
  defaultValue?: any
  // 选项数据（用于select、radio、checkbox等）
  options?: Array<{ label: string; value: any; [key: string]: any }>
  // 组件属性
  props?: Record<string, any>
  // 是否可见
  visible?: boolean | ((model: Record<string, any>) => boolean)
  // 是否显示
  show?: boolean | ((model: Record<string, any>) => boolean)
  // 联动配置
  dependencies?: string[]
  // 自定义渲染函数
  render?: (field: FieldSchema, model: Record<string, any>) => any
  // 自定义校验函数
  validator?: (value: any, model: Record<string, any>) => boolean | string
  // 字段说明
  description?: string
  // 帮助信息
  help?: string
  // 额外属性
  [key: string]: any
}

// 表单配置接口
export interface FormConfig {
  // 表单布局
  layout?: 'horizontal' | 'vertical' | 'inline'
  // 标签宽度
  labelCol?: { span: number }
  // 内容宽度
  wrapperCol?: { span: number }
  // 表单大小
  size?: 'small' | 'middle' | 'large'
  // 是否显示冒号
  colon?: boolean
  // 是否显示标签
  labelAlign?: 'left' | 'right'
  // 是否显示帮助信息
  showHelp?: boolean
  // 是否显示校验信息
  showValidate?: boolean
  // 自定义样式类
  className?: string
  // 自定义样式
  style?: Record<string, any>
}

// 表单schema类型
export type FormSchema = FieldSchema[]

// 表单数据模型类型
export type FormModel = Record<string, any>

// 表单事件类型
export interface FormEvents {
  // 字段值变化
  onChange?: (field: string, value: any, model: FormModel) => void
  // 字段失焦
  onBlur?: (field: string, value: any, model: FormModel) => void
  // 字段聚焦
  onFocus?: (field: string, value: any, model: FormModel) => void
  // 表单提交
  onSubmit?: (model: FormModel) => void
  // 表单重置
  onReset?: (model: FormModel) => void
  // 表单验证
  onValidate?: (valid: boolean, errors: any[]) => void
}

// 表单项组件属性接口
export interface FieldProps {
  // 字段配置
  field: FieldSchema
  // 表单数据
  model: FormModel
  // 字段值
  value: any
  // 是否禁用
  disabled?: boolean
  // 是否只读
  readonly?: boolean
  // 字段变化事件
  onChange?: (value: any) => void
  // 字段失焦事件
  onBlur?: (value: any) => void
  // 字段聚焦事件
  onFocus?: (value: any) => void
} 